gnome-remote-desktop headless 模式

·
Table of Contents

全流程配置

sudo apt install -y gnome-remote-desktop winpr-utils


# 为 RDP 服务生成自签名 TLS 证书:
mkdir -p ~/.local/share/gnome-remote-desktop
winpr-makecert -silent -rdp -path ~/.local/share/gnome-remote-desktop rdp-tls
# 使用 RDP 配置 GNOME 远程桌面:
grdctl --headless rdp set-tls-key ~/.local/share/gnome-remote-desktop/rdp-tls.key
grdctl --headless rdp set-tls-cert ~/.local/share/gnome-remote-desktop/rdp-tls.crt
grdctl --headless rdp enable
grdctl --headless rdp disable-view-only
grdctl --headless rdp set-credentials peter Strong@pssword
# 如果keyring密钥环也没有TPM模块, 认证信息会保存在文件中
cat ~/.local/share/gnome-remote-desktop/credentials.ini
# 为单用户服务启用无头服务器:
# systemctl --user enable --now gnome-remote-desktop-headless.service
/usr/libexec/gnome-remote-desktop-daemon --headless --

# 以 root 用户身份为单个用户永久启动无头 GNOME 会话:
# sudo systemctl enable --now [email protected]
# 客户端连接
xfreerdp /v:192.168.7.99:3389 /u:peter /p:Strong@password +clipboard /dynamic-resolution /sound:sys:pulse /microphone:sys:pulse /cert-ignore +sec-rdp

配置gnome-headless-session

sudo tee /etc/systemd/system/[email protected] <<EOF
[Unit]
# %i is the instance name (e.g., 'peter' in [email protected])
Description=GNOME Headless Desktop Session for User %i
Documentation=https://wiki.gnome.org/Projects/Mutter/RemoteDesktop
After=systemd-user-sessions.service
After=network.target remote-fs.target
# After=graphical.target
Wants=graphical.target
# 依赖于用户会话的挂载点和 D-Bus
# Requires=user@%i.service
# BindsTo=user@%i.service
# 确保在用户退出时停止
KillMode=mixed
# 在停止时发送 SIGTERM,等待 9 秒后发送 SIGKILL
TimeoutStopSec=9

[Service]
# Type=simple 适用于 ExecStart 是主进程的情况。
Type=simple
User=%i
Group=%i
PAMName=login
Environment=XDG_SESSION_TYPE=wayland
Environment=XDG_RUNTIME_DIR=/run/user/%U
Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%U/bus
# Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=%E/bus
ExecStartPre=/usr/bin/dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY XDG_SESSION_TYPE XDG_CURRENT_DESKTOP
ExecStartPre=-/bin/sh -c 'XDG_RUNTIME_DIR=/run/user/$(id -u %i) /usr/bin/loginctl enable-linger %i'
ExecStart=/usr/libexec/gnome-remote-desktop-daemon --headless
Restart=on-failure
RestartSec=9

[Install]
WantedBy=multi-user.target
EOF

使能 grd headless模式

sudo systemctl enable --now [email protected]